const BaseController = require('../base');
const { lowerCase, encryption, createToken, validateToken } = require('../../helpers/user')
class UserController extends BaseController {
    // 注册
    async register() {
        const { ctx } = this
        // 加密处理
        const { username, password, repassword, code } = encryption(ctx.request.body);
        const user = ctx.service.user;
        const res = await user.findUser({ username })
        // 判断用户是否已经注册过了
        if (res) {
            this.error({
                msg: '此用户已经注册过了'
            })
            return;
        }
        if (lowerCase(ctx.session.code) == lowerCase(code)) {
            try {
                const res = await user.addUser({ username, password });
                if (res.affectedRows >= 1) {
                    this.success({
                        msg: '注册成功',
                    })
                } else {
                    this.error({
                        msg: '注册失败'
                    })
                }
            } catch (e) {
                this.error({
                    msg: '注册失败'
                })
            }

        } else {
            this.error({
                msg: '验证码不正确'
            })
        }
    }
    // 登录
    async login() {
        const { ctx } = this;
        const { username, password } = encryption(ctx.request.body);
        const user = ctx.service.user;
        // 查询数据库的信息
        const res = await user.findUser({ username: username, password: password });
        if (res) { // 登录成功
            const token = createToken({ username, password });
            this.success({
                msg: '登录成功',
                data: {
                    token,
                    username,
                    id: res.id
                }
            })
        } else { // 账号或密码不正确
            this.error({
                msg: '账号或密码不正确'
            })
        }
    }
    /**
     * 校验登录信息
     */
    async validate() {
        const { ctx } = this;
        let token = ctx.get('Authorization');
        // 如果有这个头，才会去校验
        if (token) {
            try {
                const res = validateToken(token);
                this.success({
                    msg: '已经登录'
                })
            } catch (e) {
                this.error({
                    msg: '令牌失效'
                })
            }
        } else {
            this.error({
                msg: '未登录'
            })
        }
    }
}



module.exports = UserController;